๋์ ๋ฐฐ์ด
๋ฐฐ์ด์ ๋จ์ ์ธ '๊ณ ์ ๋ ํฌ๊ธฐ'๋ฅผ ํด๊ฒฐํ ๋ฐฐ์ด.
๋ฐฐ์ด์ด ๋ค ์ฐจ๋ฉด ๋ ๋ฐฑ์ ํฌ๊ธฐ์ ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ , ๊ธฐ์กด์ ๋ณ์๋ค์ ๋ณต์ฌํด์ ๋ฃ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด์ ๊ณต๊ฐ์ด ๋ฐ ์ด์ ๋จ์ผ๋ฉด ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ฐ์ผ๋ก ์ค์ธ๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ฅ์ . ์์ ์๊ฐ ์์ ํ์ฅ ๊ฐ๋ฅ
์์์ ์ค๋ช ํ ๋์ ๋ฐฐ์ด๋ ํ์ฅ์ ๊ฐ๋ฅํ์ง๋ง ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ฐ๋ผ ํ์ฅํ๋๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค. nํฌ๊ธฐ์ ๋ฐฐ์ด์ ํ์ฅ(์๋ ๋ณ์๋ค์ ๋ณต์ฌ)ํ๋๋ฐ O(n)๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ทธ๋ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์๋ก์ด ์๋ก์ด ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ถ๊ฐํ๋ ์๊ฐ๋ง ํ์ํ๋๊น ํญ์ ์ผ์ ํ ์๊ฐ๋ง ์์๋๋ค. - ๋จ์ . ๊ฐ๋ณ ํญ๋ชฉ์ ์ ๊ทผํ๋ ์๊ฐ์ด ๊ธธ๋ค.
pint(myArray[300])
์ด๋ผ๊ณ ํ๋ฉด ๋ฐฐ์ด์ ๊ธฐ๋ณธ ์ฃผ์์ offset(size * index)๋ฅผ ๋ํ๋ ๊ฐ๋จํ ๊ณ์ฐ์ผ๋ก ๋ฐ๋ก ํด๋น ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๊ทธ๋ฌ๋print(myLinkedList[300])
์ด๋ผ๊ณ ํ๋ฉด 0๋ฒ์งธ -> 1๋ฒ์งธ -> 2๋ฒ์งธ -> .... ์ด๋ ๊ฒ 299๋ฒ์งธ์ ํฌ์ธํฐ๋ฅผ ์ฝ๊ณ ํด๋น ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋๊ฒ. O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.๋ฐฐ์ด์ locality
cpu์ ๊ณ์ฐ์๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ cpu๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์๋๋ณด๋ค ์๋ฑํ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ cpu ์์ ์๋ cache์์ญ(๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค)์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ cpu๋ ๊ฑฐ๊ธฐ์ ์ฐ์ฐํ ์๋ฃ๋ค์ ๊ฐ์ ธ์จ๋ค.
๊ทธ๋ฐ๋ฐ ๋งํฌ๋ ๋ฆฌ์คํธ์ฒ๋ผ ์์๋ค์ด ํฉ์ด์ ธ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์บ์๋ก ๊ฐ์ ธ๊ฐ ๋ ๋ฉ๋ฆฌ์๋๊ฑด ๋นผ๋๊ณ ์ ๋ฌํ ์ ์๊ณ (missing ํ๋ค๊ณ ํํ) ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฐ์ฐ ์๋๊ฐ ๋๋ ค์ง๋ค. - ๋จ์ . ์ถ๊ฐ์ ์ธ ์ฐธ์กฐ ํฌ์ธํฐ๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ญ๋น
(๊ฐ/ํฌ์ดํฐ) -> (๊ฐ/ํฌ์ธํฐ) -> .... ์ด๋ ๊ฒ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๋ฅผ ์ํ ๊ณต๊ฐ์ด ํ์ํ๋ค๋ ๊ฒ.
Singly Linked List
์ผ๋ฐ์ ์ธ '๋งํฌ๋ ๋ฆฌ์คํธ'๋ ์ฃผ๋ก ์ด๊ฑธ ์ง์นญํ๋ค.
head -> (๊ฐ/ํฌ์ธํฐ) -> (๊ฐ/ํฌ์ธํฐ) -> .... -> (๊ฐ/null)
์ฝ์
head->7->14->25->36 ์ฒ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์ซ์๋ฅผ ๋ด๊ณ ์๋ ๋ฆฌ์คํธ๊ฐ ์๋ค.
๋งจ ์์
3์ ๋ฃ์ผ๋ ค๋ฉด ๋งจ ์์ ๋ฃ์ด์ผํ๋ค.
- ์ ๋ ธ๋ (3 ๋ ธ๋)๋ฅผ ๋ง๋ค๊ณ
- 7 ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํค๋๋ฅผ 3์ ๊ฐ๋ฆฌํค๋๋ก ๋ฐ๊พธ๊ณ
- 3 ๋ ธ๋๊ฐ 7 ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. ์ด ๋ฐฉ๋ฒ์ด๋ฉด ์ถฉ๋ถํ๊ฒ ์ฒ๋ผ ๋ณด์ด๋. 2๋ฒ ๋จ๊ณ์์ ํค๋๊ฐ 7 ๋ ธ๋ ๋์ 3๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉด์ 7 ๋ ธ๋์ ์ฃผ์๊ฐ์ ์๋ฌด๋ ๋ชจ๋ฅด๊ฒ ๋๋ค. ๊ทธ๋์ 3 ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํฌ ์ฃผ์๋ฅผ ๋ชฐ๋ผ์ 3๋ฒ ๋จ๊ณ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์งํํด์ผํ๋ค.
- ์ ๋ ธ๋(3 ๋ ธ๋)๋ฅผ ๋ง๋ค๊ณ
- 3๋ ธ๋๊ฐ 7๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ
- ํค๋๊ฐ 7 ๋์ 3 ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํด์ผํ๋ค.
(์์ 2๋ฒ๊ณผ 3๋ฒ์ ์์๋ฅผ ๋ฐ๊พผ๋ค.)
๋งจ ๋ค์
50์ ๋์ผ๋ ค๋ฉด ๋งจ ๋ค์ ๋ฃ์ด์ผํ๋ค.
- ์ ๋ ธ๋(50 ๋ ธ๋)๋ฅผ ๋ง๋ ๋ค.
- ํฌ์ธํฐ๊ฐ null์ธ 36 ๋ ธ๋์ ๋์ฐฉ.
- 36 ๋ ธ๋์ ํฌ์ธํฐ์ null์ด ์๋ 50 ๋ ธ๋์ ์ฃผ์๊ฐ์ ์ ๋ ฅ.
์ค๊ฐ์
20์ด๋ผ๋ ์ซ์๋ 14์ 25์ฌ์ด์ ์์นํด์ผํ๋ค.
์ด ๊ฒฝ์ฐ๋ ์ฌ์ค ์์์ ๋ณธ ๋งจ ์์ ์ฝ์
ํ๋๊ฒ๊ณผ ๋์ผํ๋ค.
- ์ ๋ ธ๋(20)์ ๋ง๋ค๊ณ
- 20 ๋ ธ๋๊ฐ 25 ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ
- 14 ๋ ธ๋๊ฐ 20 ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํด์ผํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก 14๋ ธ๋๊ฐ 25๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๊ฐ์ ๋ฐ๊พธ๋ฉด 25 ์ฃผ์๊ฐ์ ํ๋ก๊ทธ๋จ์์์ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋จผ์ 20๋ ธ๋๊ฐ 25๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํด์ผํ๋ค.
์ฝ๋ ์์
์์ ์ค์๋ c์ธ์ด๋ฅผ ์ฌ์ฉํด ์ค๋ช ํ์๋๋ฐ ๊ทธ๊ฑธ ๊ตณ์ด ๋ฐ์ ์ ์ง๋ ์๊ฒ ๋ค.
c์ธ์ด๋ call by value
void swap(int a, int b){...}
๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด์swap(p,q)
๋ผ๊ณ ํธ์ถํ๋ฉด p์ q์ ์ฃผ์๊ฐ์ ์ ๋ฌํ์ง ์๊ณ ์ค์ p์ q์ ๊ฐ(์ซ์)๋ฅผ ๋ณต์ฌํด์ ์ค๋ค.
swap()
ํจ์์ ๋ชฉ์ ์ด p์ q์ ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ ๋ฐํํ๋ ๊ฒ์ด๋ผ๋ฉด ๊ทธ๊ฑธ ํธ์ถํ ์์ ํจ์์์๋ ๋งค๊ฐ๋ณ์ p์ q์ ํฌ์ธํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
์๋ก์ด ๋
ธ๋๋ฅผ ์ฝ์
ํ๋ Insert()
ํจ์๋ฅผ ๋ง๋๋ ค๋ฉด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์?
๋งจ ์์ ๋ฃ๋๋ค๊ณ ๊ฐ์ ํด๋ณด๋ฉด, ํค๋๊ฐ ๊ฐ์ง๊ณ ์๋ ํฌ์ธํฐ์ ๊ฐ์ ์ ๋
ธ๋์ ์ฃผ์๊ฐ์ผ๋ก ๋ฐ๊ฟ์ค์ผ ํ๊ธฐ ๋๋ฌธ์. ํฌ์ธํฐ๊ฐ ์๋ ๊ทธ๋ฅ ์ฃผ์๊ฐ ์์ฒด๋ฅผ ๊ฑด๋ด์ฃผ๋ฉด ์ ๋
ธ๋๊ฐ ๊ธฐ์กด ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ ์๋ ์๊ฒ ์ง๋ง ํค๋๊ฐ ์์ ์ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋ค ๋ฐฉ๋ฒ์ด ์๋ค.